#include<iostream>
using namespace std;
#include<sys/wait.h>
#include<unistd.h>
#include<sys/types.h>

int main()
{
    int pipefd[2] = {0};
    int n = pipe(pipefd);
    if(n < 0)
    {
        perror("pipe");
        return 1;
    }
    pid_t id = fork();
    if(id == 0)
    {
        //child
        close(pipefd[0]);
        char c = 'a';
        int count = 0;
        while(1)
        {
            //子进程一直进行写入
            write(pipefd[1], &c, 1);
            count++;
            cout<<"count:"<<count<<endl;
        }
        close(pipefd[1]);
        exit(0);
    }
    //father
    close(pipefd[1]);
    //父进程
    waitpid(id, nullptr, 0);
    close(pipefd[0]);
    return 0;
}

// #include<iostream>
// using namespace std;
// #include<unistd.h>
// #include<cstring>
// #include<sys/types.h>
// #include<sys/wait.h>

// int main()
// {
//     //创建匿名管道
//     int pipefd[2] = {0};
//     int n = pipe(pipefd);
//     if(n<0)
//     {
//         perror("pipe");
//         return 1;
//     }
//     //创建子进程 if分流
//     pid_t id = fork();
//     if(id == 0)
//     {
//         //child
//         close(pipefd[0]);   //关闭读端
//         const char* msg = "hello father I am child process";
//         int count = 10;
//         while(count--)
//         {
//             write(pipefd[1], msg, strlen(msg));
//             sleep(1);
//         }
//         close(pipefd[1]);   //子进程写完后退出
//         exit(0);
//     }
//     //father
//     close(pipefd[0]);
//     close(pipefd[1]);   //读写都关闭，没人读，只有子进程写
//     //导致子进程会被操作系统杀死
//     int status = 0;
//     waitpid(id, &status, 0);
//     cout<<"child get signal:"<<(status&0x7f)<<endl;
//     return 0;
// }